#include <iostream>

#include "minesweeper.h"

using namespace std;

int main(int argc, char const *argv[])
{
    char mine_ui[ROW][COL] = {'\0'};
    char mine_area[ROW][COL] = {'\0'};

    mine_ui_init(mine_ui);

    mine_area_init(mine_area);
    show_mine_ui(mine_area);

    int ret = 0;
    int flag = 1;
    int choose = 0;
    int row_index = 0;
    int col_index = 0;

    // 已使用的标记次数
    int used_mark_count = 0;
    // 表示成功次数
    int mark_success_count = 0;

    while (1)
    {
        show_mine_ui(mine_ui);
        cout << "请输入您的选择: \n1. 探索.\n2. 标记.\n3. 取消标记 " << endl;
        cin >> choose;

        switch (choose)
        {
        case EXPLORE:
            cout << "请输入探索的雷区下标位置，例如 1 2 : ";
            cin >> row_index >> col_index;

            flag = explore_mine_area(mine_ui, mine_area, row_index, col_index);
            break;
        case MARK:
            cout << "请输入标记为雷区的下标位置，例如 1 2 : ";
            cin >> row_index >> col_index;

            /*
            ret 存储当前标记操作对应的结果情况
                如果提供下标错误，ret 结果为 -1，标记失败结果为 0，标记成功结果为 1
            */
            ret = mark_mine(mine_ui, mine_area, row_index, col_index);

            /*
            如果 ret 结果为 -1 表示当前提供的下标不合法，【标记未使用，标记成功次数不影响】
            如果 ret 结果为 0 表示标记位置非雷区，【标记已使用，标记成功次数不影响/标记成功次数 += 0】
            如果 ret 结果为 1 表示标记位置为雷区，【标记已使用，标记成功次数 += 1】
            */
            if (ret != -1)
            {
                used_mark_count += 1;
                mark_success_count += ret;
            }
            break;

        default:
            cout << "其他操作" << endl;
            break;
        }

        if (!flag)
        {
            cout << "GAME OVER!" << endl;
            break;
        }

        if (mark_success_count == used_mark_count && mark_success_count == MINE_COUNT)
        {
            cout << "Good Job!!! 游戏胜利!" << endl;
            break;
        }
    }

    return 0;
}
